/**
 * 
 */
package com.hera.base.rest.delegate;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.web.client.RestTemplate;

import com.hera.base.domain.WrapperJSON;



/**
 * @author cmontes
 *
 */
public class BaseDelegate {

	@Autowired
	protected RestTemplate restTemplate;
	
	public <T> T postForObject(String url, Object request, ParameterizedTypeReference<WrapperJSON<T>> responseType) {
		
		WrapperJSON<T> mensajeJSON = (WrapperJSON<T>) restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(request), responseType).getBody(); 
		
		if (mensajeJSON.isExito() == false) {
			throw new RuntimeException(mensajeJSON.getException().getMessage());
		}
		
		return mensajeJSON.getMensaje();
	}
	
	public <T> WrapperJSON<T> postForObjectWrapper(String url, Object request, ParameterizedTypeReference<WrapperJSON<T>> responseType){
		
		WrapperJSON<T> mensajeJSON = (WrapperJSON<T>) restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(request), responseType).getBody();
		
		if (mensajeJSON.isExito() == false) {
			throw new RuntimeException(mensajeJSON.getException().getCause());
		}
		
		return mensajeJSON;
	}
	
}
